﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;

namespace 畜牧业审核程序国产.Models.RagModel.JsonObject.TrainedTongyiJsonObject
{
    internal class TrainedTongyiObject
    {
    }
    /*
    命名规范：
带 JsonPropertyName 的类：C# 属性名通常遵循 PascalCase（首字母大写），而 JSON 键名可能使用 snake_case 或其他命名约定。JsonPropertyName 属性用于指定 JSON 中的实际键名。
不带 JsonPropertyName 的类：你的现有类直接使用了与 JSON 键名相匹配的小写或蛇形命名法（例如 finish_reason）。这使得在没有额外属性的情况下，JSON 序列化/反序列化库可以自动将 JSON 键名映射到相应的 C# 属性。
属性映射：
带 JsonPropertyName 的类：明确指定了每个属性对应于 JSON 中的具体键名。这种方式提高了代码的可读性和维护性，尤其是在 C# 属性名和 JSON 键名不一致时。
不带 JsonPropertyName 的类：依赖于默认的命名规则进行映射。如果 C# 属性名和 JSON 键名完全一致，则不需要额外配置。但如果两者不同，可能会导致映射失败或需要额外的配置。
灵活性和控制力：
带 JsonPropertyName 的类：提供了更高的灵活性和控制力，允许你根据需要自定义 JSON 键名，而不受 C# 属性命名规则的限制。
不带 JsonPropertyName 的类：简化了代码，减少了属性声明中的冗余，但在某些情况下可能不够灵活，特别是当需要处理复杂或不一致的 JSON 结构时。
    */

    #region Output类
    public class Output
    {
        [JsonPropertyName("finish_reason")]
        public string FinishReason { get; set; }

        [JsonPropertyName("session_id")]
        public string SessionId { get; set; }

        [JsonPropertyName("text")]
        public string Text { get; set; }
        [JsonPropertyName("doc_references")]
        public List<DocReference> DocReferences { get; set; }
    }
    #endregion
    #region  DocReference 类
    public class DocReference
    {
        [JsonPropertyName("images")]
        public List<string> Images { get; set; }

        [JsonPropertyName("page_number")]
        public List<int> PageNumbers { get; set; }

        [JsonPropertyName("doc_name")]
        public string DocName { get; set; }

        [JsonPropertyName("text")]
        public string Text { get; set; }

        [JsonPropertyName("index_id")]
        public string IndexId { get; set; }

        [JsonPropertyName("title")]
        public string Title { get; set; }

        [JsonPropertyName("doc_id")]
        public string DocId { get; set; }
    }
    #endregion
    #region  Usage 类及其嵌套类
    public class ModelUsage
    {
        [JsonPropertyName("output_tokens")]
        public int OutputTokens { get; set; }

        [JsonPropertyName("model_id")]
        public string ModelId { get; set; }

        [JsonPropertyName("input_tokens")]
        public int InputTokens { get; set; }
    }

    public class Usage
    {
        [JsonPropertyName("models")]
        public List<ModelUsage> Models { get; set; }
    }
    #endregion
    #region 顶层类
    public class TrainedTongyiResponse
    {
        [JsonPropertyName("output")]
        public Output Output { get; set; }

        [JsonPropertyName("usage")]
        public Usage Usage { get; set; }

        [JsonPropertyName("request_id")]
        public string RequestId { get; set; }
        
    }
    #endregion
}
